package net.servir.capacidades.web.controller;
import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.servir.capacidades.model.Usuario;
import net.servir.capacidades.service.CapacidadesService;
import net.servir.capacidades.service.SeguridadService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class SelectorController {

	@Autowired
	private CapacidadesService capacidadesService;

	@Autowired
	private SeguridadService seguridadService;

	
	@RequestMapping("/selector.htm")
	public @ModelAttribute("selector")
	String censo(HttpServletRequest request,HttpServletResponse response){
		
		String  usuario = "";
		String  clave = "";
		String obj = "";
		HttpSession session = request.getSession();
		usuario= (String) request.getParameter("dni");
		clave = (String) request.getParameter("clave");
		
		String idsesion =session.getId();  
		String pre_idsesion =request.getParameter("ref");
		String pre_idsesion_serv = null;
		String cap_validacion = null;
		String cap_validacion_serv = null;
		Integer numIntentos = 0;
		Boolean acceso = true;
		
		if(session.getAttribute("num_intentos") != null)
		{
			numIntentos = Integer.parseInt(session.getAttribute("num_intentos").toString());
		}
		numIntentos += 1;
		session.setAttribute("num_intentos", numIntentos.toString());
		
		if(session.getAttribute("idsesion_serv") != null)
			pre_idsesion_serv = session.getAttribute("idsesion_serv").toString();
		
		if (session.getAttribute("captcha_serv") != null)
			cap_validacion_serv = session.getAttribute("captcha_serv").toString();
		
		cap_validacion =request.getParameter("captcha");
		
		if (pre_idsesion != null && usuario != null)
		{
			// valido id de sesion
			if (pre_idsesion != null)
			if (!pre_idsesion.equals(idsesion))
			{
				request.setAttribute("acceso", "CANCEL");
				session.setAttribute("mensaje", "Usuario no válido, por favor intente de nuevo.");
				acceso = false;
			}
			if (pre_idsesion_serv != null)
			if (!pre_idsesion_serv.equals(idsesion))
			{
				request.setAttribute("acceso", "CANCEL");
				session.setAttribute("mensaje", "Usuario no válido, por favor intente de nuevo.");
				acceso = false;
			}
			// valido Captcha
			if (cap_validacion != null & cap_validacion_serv != null)
			if (!cap_validacion_serv.equals(cap_validacion))
			{
				request.setAttribute("acceso", "CANCEL");
				acceso = false;
				session.setAttribute("mensaje", "Acceso no válido, por favor intente de nuevo.");
			}
		}
		
		Integer idPerfil = 0;
		
		if (acceso)
		{	
			idPerfil = capacidadesService.ObtenerPerfil(usuario, clave);
			// Sistema sistema = capacidadesService.ObtenerSistema()
			if (idPerfil == 0)
			{
				request.setAttribute("acceso", "CANCEL");
				session.setAttribute("mensaje", "Número de DNI o clave no válido, por favor intente de nuevo.");
			}
			else
			{
				//Recuperamos todos los permisos del usuario
				Usuario usuarioIdentificacion = capacidadesService.GetUsuarioIdentificacion(usuario);
				ArrayList<Number> lstPermisosUsuario= seguridadService.getPermisosUsuario(usuario);
				ArrayList<Number> lstRecursosUsuario= seguridadService.getRecursosUsuario(usuario);

				usuarioIdentificacion.setLstPermisosUsuario(lstPermisosUsuario);
				usuarioIdentificacion.setLstRecursosUsuario(lstRecursosUsuario);
				
				
				request.setAttribute("acceso", idPerfil);				
				session.setAttribute("dni", usuario);
				session.setAttribute("perfil", idPerfil);
				session.setAttribute("usuario", usuarioIdentificacion);
				session.setAttribute("mensaje", ".");
				numIntentos = 0;
				session.setAttribute("num_intentos", numIntentos.toString());
			}
		}
		
		session.setAttribute("ref", session.getId().toString());
		try {
			
			if(request.getAttribute("acceso").equals("CANCEL"))
			{
				response.sendRedirect(response.encodeRedirectURL("inicio.htm"));
			}
			if(idPerfil == 2)
			{
				response.sendRedirect(response.encodeRedirectURL("baseServir.htm"));
				//response.sendRedirect(response.encodeRedirectURL("ejecutoraCenso.htm"));				
			}
			if(idPerfil == 1)
			{
				response.sendRedirect(response.encodeRedirectURL("baseServir.htm"));
				
			}
			if(request.getAttribute("acceso").equals("APOY"))
			{
				response.sendRedirect(response.encodeRedirectURL("baseApoyo.htm"));
			}
			if(!request.getAttribute("acceso").equals("CANCEL"))
			{
				response.sendRedirect(response.encodeRedirectURL("baseServir.htm"));
			}
		} catch (Exception e) {
			return null;
		}
		return obj;
	}
}
